/**
 * Software License, Version 1.0
 * 
 * Copyright 2003 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
/**
 * Software License, Version 1.0
 * 
 * Copyright 2004 The Trustees of Indiana University.  All rights reserved.
 * 
 *
 *Redistribution and use in source and binary forms, with or without 
 *modification, are permitted provided that the following conditions are met:
 *
 *1) All redistributions of source code must retain the above copyright notice,
 * the list of authors in the original source code, this list of conditions and
 * the disclaimer listed in this license;
 *2) All redistributions in binary form must reproduce the above copyright 
 * notice, this list of conditions and the disclaimer listed in this license in
 * the documentation and/or other materials provided with the distribution;
 *3) Any documentation included with all redistributions must include the 
 * following acknowledgement:
 *
 *"This product includes software developed by the Community Grids Lab. For 
 * further information contact the Community Grids Lab at 
 * http://communitygrids.iu.edu/."
 *
 * Alternatively, this acknowledgement may appear in the software itself, and 
 * wherever such third-party acknowledgments normally appear.
 * 
 *4) The name Indiana University or Community Grids Lab or NaradaBrokering, 
 * shall not be used to endorse or promote products derived from this software 
 * without prior written permission from Indiana University.  For written 
 * permission, please contact the Advanced Research and Technology Institute 
 * ("ARTI") at 351 West 10th Street, Indianapolis, Indiana 46202.
 *5) Products derived from this software may not be called NaradaBrokering, 
 * nor may Indiana University or Community Grids Lab or NaradaBrokering appear
 * in their name, without prior written permission of ARTI.
 * 
 *
 * Indiana University provides no reassurances that the source code provided 
 * does not infringe the patent or any other intellectual property rights of 
 * any other entity.  Indiana University disclaims any liability to any 
 * recipient for claims brought by any other entity based on infringement of 
 * intellectual property rights or otherwise.  
 *
 *LICENSEE UNDERSTANDS THAT SOFTWARE IS PROVIDED "AS IS" FOR WHICH NO 
 *WARRANTIES AS TO CAPABILITIES OR ACCURACY ARE MADE. INDIANA UNIVERSITY GIVES
 *NO WARRANTIES AND MAKES NO REPRESENTATION THAT SOFTWARE IS FREE OF 
 *INFRINGEMENT OF THIRD PARTY PATENT, COPYRIGHT, OR OTHER PROPRIETARY RIGHTS. 
 *INDIANA UNIVERSITY MAKES NO WARRANTIES THAT SOFTWARE IS FREE FROM "BUGS", 
 *"VIRUSES", "TROJAN HORSES", "TRAP DOORS", "WORMS", OR OTHER HARMFUL CODE.  
 *LICENSEE ASSUMES THE ENTIRE RISK AS TO THE PERFORMANCE OF SOFTWARE AND/OR 
 *ASSOCIATED MATERIALS, AND TO THE PERFORMANCE AND VALIDITY OF INFORMATION 
 *GENERATED USING SOFTWARE.
 */
package cgl.narada.gridapps.nbgridftp.client;

import java.awt.BorderLayout;
import java.io.File;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;
import javax.swing.border.BevelBorder;
import javax.swing.border.EtchedBorder;

import org.globus.ftp.DataChannelAuthentication;
import org.gridforum.jgss.ExtendedGSSManager;
import org.ietf.jgss.GSSCredential;

import cgl.narada.gridapps.nbgridftp.gridftpext.NBGridFTPClient;

/**
   @author Sang Boem Lim
   $Date$
   $Revision$
 */

public class ActionPanel extends JPanel {

    public JMenuBar menuBar;
    public JToolBar toolBar;

    private boolean isConnected = false;
    
    public ActionPanel() {
        super(true);
        
        menuBar = new JMenuBar();
        menuBar.setBorder(new BevelBorder(BevelBorder.RAISED));
        
        JMenu menu = new JMenu("Menu");
        menuBar.add(menu);

        JMenu connect = new JMenu("Connect");
        menuBar.add(connect);

        toolBar = new JToolBar();
        toolBar.setBorder(new EtchedBorder());
        
        NBAction uploadAction = new NBAction(this, "Upload",
                                             new ImageIcon("upload.gif"));

        NBAction downloadAction = new NBAction(this, "Download",
                                               new ImageIcon("download.gif"));

        NBAction connectAction = new NBAction(this, "Connect",
                                             new ImageIcon("connect.gif"));

        NBAction exitAction = new NBAction(this, "Exit");
        
        JMenuItem uploadItem = new JMenuItem(uploadAction);
        JMenuItem downloadItem = new JMenuItem(downloadAction);
        downloadItem.setEnabled(false);

        JMenuItem connectItem = new JMenuItem(connectAction);
        
        JButton uploadButton = new JButton(uploadAction);
        JButton downloadButton = new JButton(downloadAction);
        downloadButton.setEnabled(false);

        JButton connectButton = new JButton(connectAction);

        menu.add(uploadItem);
        menu.add(downloadItem);
        menu.add(exitAction);
        connect.add(connectItem);

        toolBar.add(uploadButton);
        toolBar.add(downloadButton);
        toolBar.add(connectButton);
    }

    public void setConnected() {

        isConnected = true;
    }

    public String host;
    public int port;

    public void setHost(String host, int port) {

        this.host = host;
        this.port = port;
    }

    public void connect() {

        JFrame f = new JFrame("Connect");

        NBGridFTP.makeCenter(f, 300, 150);

        Connect conn = new Connect();
        JButton submit = new JButton("Submit");

        submit.addActionListener(new ConnectAction(this, conn, f));

        f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        f.getContentPane().add(conn, BorderLayout.NORTH);
        JPanel p = new JPanel();
        p.add(submit);
        f.getContentPane().add(p, BorderLayout.SOUTH);
        f.pack();
        f.setVisible(true);
    }

    public void connectionTest() {

       NBGridFTP.addInfo("Connecting to server "+host+":"+port+".\n");
       NBGridFTPClient client = null;
       try {
           client = new NBGridFTPClient(host, port);
           ExtendedGSSManager manager =
               (ExtendedGSSManager)ExtendedGSSManager.getInstance();
                    
           GSSCredential cred =
               manager.createCredential(GSSCredential.INITIATE_AND_ACCEPT);

           client.authenticate(cred);
           client.setDataChannelAuthentication(DataChannelAuthentication.NONE);
            
           client.close();
            
           setConnected();

           NBGridFTP.updateRemoteDir(host, port);

           NBGridFTP.addInfo("Connection has been made to server "+ host
                             +":"+port+".\n\n");
       } catch (Exception e) {

           try{
               if(client!= null) client.close();
           } catch(Exception ex) { }

          NBGridFTP.addInfo("Connection can not be made to server "+ host
                           + ":" + port + ".\n\n");

           new Information().showError("Fail to connect to host "+
                                       host+":"+port+".");
       }
    }

    Upload up;
    public boolean upload() {

        if (!isConnected) {             
            new Information().showInformation("Please connect first.");
            NBGridFTP.addInfo("Please make connection first.");
        } else {
            File file = selectFile();
            
            if(file != null) {
                up = new Upload(file.getAbsolutePath(), 
                           RemoteDir.getCurrentDir()+"/"+file.getName(),
                                       host, port, file.getName());
                up.start();

            }
        }

        return true;
    }

    private File selectFile() {

        JFileChooser chooser = new JFileChooser();
        //chooser.setMultiSelectionEnabled(true);
        
        if (chooser.showOpenDialog(ActionPanel.this) != 
            JFileChooser.APPROVE_OPTION)
            return null;
        
        return chooser.getSelectedFile();
        //File[] file = chooser.getSelectedFiles();
    }
}
